const express = require('express');
const bcrypt = require('bcrypt');
const session = require('express-session');
const bodyParser = require('body-parser');
const path = require('path');  // 引入 path 模块

const app = express();
const port = 3000;

// 模拟数据库，通常这里会使用真实的数据库（如 MongoDB、MySQL 等）
let users = [];

// 中间件
app.use(bodyParser.urlencoded({ extended: true }));
app.use(session({
    secret: 'your-secret-key', // 设置 session 密钥
    resave: false,
    saveUninitialized: true,
}));

// 设置视图引擎
app.set('view engine', 'ejs');

// 设置视图文件所在的目录（确保路径正确）
app.set('views', path.join(__dirname, 'views')); // 使用相对路径

// 首页，登录/注册页面
app.get('/', (req, res) => {
    res.render('login-register', { errorMessage: null });
});

// 处理注册请求
app.post('/register', async (req, res) => {
    const { username, password } = req.body;
    
    // 检查用户名是否已存在
    if (users.some(user => user.username === username)) {
        return res.render('login-register', { errorMessage: '用户名已存在' });
    }

    // 加密密码
    const hashedPassword = await bcrypt.hash(password, 10);

    // 保存用户数据（模拟数据库存储）
    users.push({ username, password: hashedPassword });

    res.render('login-register', { errorMessage: '注册成功！请返回登录。' });
});

// 处理登录请求
app.post('/login', async (req, res) => {
    const { username, password } = req.body;

    // 查找用户
    const user = users.find(user => user.username === username);
    if (!user) {
        return res.render('login-register', { errorMessage: '用户名不存在' });
    }

    // 验证密码
    const match = await bcrypt.compare(password, user.password);
    if (!match) {
        return res.render('login-register', { errorMessage: '密码错误' });
    }

    // 登录成功，保存用户会话
    req.session.user = { username: user.username };
    res.redirect('/dashboard'); // 登录成功后跳转到用户面板
});

// 用户面板（登录后访问）
app.get('/dashboard', (req, res) => {
    // 检查用户是否已登录
    if (!req.session.user) {
        return res.redirect('/'); // 如果未登录，重定向到登录页面
    }

    res.render('dashboard', { username: req.session.user.username });
});

// 处理登出请求
app.get('/logout', (req, res) => {
    req.session.destroy(() => {
        res.redirect('/'); // 注销后返回登录页面
    });
});

// 启动服务器
app.listen(port, () => {
    console.log(`服务器正在运行在 http://localhost:${port}`);
});
